package com.designPattern.ProxyPattern;

import java.lang.reflect.Proxy;

/**
 * Created by Administrator on 2018/3/12.
 */

public class TestProxy {

    public static void main(String[] args) {
        // 静态代理，只能代理实现相同接口的具体类
        System.out.println("StaticProxy");

        Gowcage g = new Gowcage();
        StaticProxy staticProxy = new StaticProxy(g);
        staticProxy.chooseRestaurant();
        staticProxy.orderLunch();
        staticProxy.packLunch();

        // 动态代理，可以代理实现任意接口的具体类
        System.out.println("DynamicProxy");

        DynamicProxy dynamicProxy = new DynamicProxy(g);
        ClassLoader loader = g.getClass().getClassLoader();
        // 动态创建代理类，需要传入一个类加载器ClassLoader；
        // 一个你希望这个代理实现的接口列表，这里要代理IBuylunch接口；
        // 和一个InvocationHandler的实现，也就是前面创建的dynamicProxy。
        IBuylunch iBuylunch = (IBuylunch) Proxy.newProxyInstance(loader, new Class[]{IBuylunch.class}, dynamicProxy);
        iBuylunch.chooseRestaurant();
        iBuylunch.orderLunch();
        iBuylunch.packLunch();
    }
}
